<?php
	//BBcode 2 HTML was written by WAY2WEB.net
	//It is free for you to use anywhere as long as you provide a link back to www.way2web.net
	
	function BBCode( $Text ) {
		// Replace any html brackets with HTML Entities to prevent executing HTML or script
		// Don't use strip_tags here because it breaks [url] search by replacing & with amp
		$Text = str_replace( "<", "&lt;", $Text );
		$Text = str_replace( ">", "&gt;", $Text );
		
		// Convert new line chars to html <br /> tags
		$Text = nl2br( $Text );
		
		// Set up the parameters for a URL search string
		$URLSearchString = " a-zA-Z0-9\:\/\-\?\&\.\=\_\~\#\'";
		// Set up the parameters for a MAIL search string
		$MAILSearchString = $URLSearchString . " a-zA-Z0-9\.@";
		
		// Perform URL Search
		$Text = preg_replace( "/\[url\]([$URLSearchString]*)\[\/url\]/", '<a href="$1" target="_blank">$1</a>', $Text);
		$Text = preg_replace( "(\[url\=([$URLSearchString]*)\](.+?)\[/url\])", '<a href="$1" target="_blank">$2</a>', $Text);
		//$Text = preg_replace( "(\[url\=([$URLSearchString]*)\]([$URLSearchString]*)\[/url\])", '<a href="$1" target="_blank">$2</a>', $Text);
		
		// Perform MAIL Search
		$Text = preg_replace( "(\[mail\]([$MAILSearchString]*)\[/mail\])", '<a href="mailto:$1">$1</a>', $Text);
		$Text = preg_replace( "/\[mail\=([$MAILSearchString]*)\](.+?)\[\/mail\]/", '<a href="mailto:$1">$2</a>', $Text);
		
		// Check for bold text
		$Text = preg_replace( "(\[b\](.+?)\[\/b])is", '<span class="bold">$1</span>', $Text);
		
		// Check for Italics text
		$Text = preg_replace( "(\[i\](.+?)\[\/i\])is", '<span class="italics">$1</span>', $Text);
		
		// Check for Underline text
		$Text = preg_replace( "(\[u\](.+?)\[\/u\])is", '<span class="underline">$1</span>', $Text);
		
		// Check for strike-through text
		$Text = preg_replace( "(\[s\](.+?)\[\/s\])is", '<span class="strikethrough">$1</span>', $Text);
		
		// Check for over-line text
		$Text = preg_replace( "(\[o\](.+?)\[\/o\])is", '<span class="overline">$1</span>', $Text);
		
		// Check for colored text
		$Text = preg_replace( "(\[color=(.+?)\](.+?)\[\/color\])is", "<span style=\"color: $1\">$2</span>", $Text);
		
		// Check for sized text
		$Text = preg_replace( "(\[size=(.+?)\](.+?)\[\/size\])is", "<span style=\"font-size: $1px\">$2</span>", $Text);
		
		// Check for list text
		$Text = preg_replace( "/\[list\](.+?)\[\/list\]/is", '<ul class="listbullet">$1</ul>', $Text);
		$Text = preg_replace( "/\[list=1\](.+?)\[\/list\]/is", '<ul class="listdecimal">$1</ul>', $Text);
		$Text = preg_replace( "/\[list=i\](.+?)\[\/list\]/s", '<ul class="listlowerroman">$1</ul>', $Text);
		$Text = preg_replace( "/\[list=I\](.+?)\[\/list\]/s", '<ul class="listupperroman">$1</ul>', $Text);
		$Text = preg_replace( "/\[list=a\](.+?)\[\/list\]/s", '<ul class="listloweralpha">$1</ul>', $Text);
		$Text = preg_replace( "/\[list=A\](.+?)\[\/list\]/s", '<ul class="listupperalpha">$1</ul>', $Text);
		$Text = str_replace( "[*]", "<li>", $Text);
		
		// Check for font change text
		$Text = preg_replace( "(\[font=(.+?)\](.+?)\[\/font\])", "<span style=\"font-family: $1;\">$2</span>", $Text);
		
		// Declare the format for [code] layout
		$CodeLayout = '<code><p>$1</p></code>';
		
		// Check for [code] text
		$Text = preg_replace( "/\[code\](.+?)\[\/code\]/is", $CodeLayout, $Text); // replaced "$CodeLayout" with $CodeLayout
		
		// Check for [php] text
		$Text = preg_replace_callback( "/\[php\](.+?)\[\/php\]/is",
			create_function( '$matches',
			"return '<code><p>' . highlight_string( \$matches[ 1 ], true ) . '</p></code>';" ), $Text);
		
		// Declare the format for [quote] layout
		$quoteLayout = '<blockquote><p>$1</p></blockquote>';
		
		// Check for [quote] text
		$Text = preg_replace( "/\[quote\](.+?)\[\/quote\]/is", $quoteLayout, $Text);
		
		// Images
		// [img]pathtoimage[/img]
		$Text = preg_replace("/\[img\](.+?)\[\/img\]/", '<img src="$1">', $Text);
		
		// [img=widthxheight]image source[/img]
		$Text = preg_replace( "/\[img\=([0-9]*)x([0-9]*)\](.+?)\[\/img\]/", '<img src="$3" height="$2" width="$1">', $Text);
		
		// Now, Finally replace '&' with '&amp;'
//		$Text = preg_replace( "/\&/" );
		
		return $Text;
	}
